<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::LineRGBD&lt; PointXYZT, PointRGBT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_line_r_g_b_d.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">类</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pub-attribs">Public 属性</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pro-static-methods">静态 Protected 成员函数</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1_line_r_g_b_d-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::LineRGBD&lt; PointXYZT, PointRGBT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p>High-level class for template matching using the <a class="el" href="classpcl_1_1_l_i_n_e_m_o_d.html" title="Template matching using the LINEMOD approach.">LINEMOD</a> approach based on <a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> and Depth data.  
 <a href="classpcl_1_1_line_r_g_b_d.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="line__rgbd_8h_source.html">line_rgbd.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
类</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">Detection</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="classpcl_1_1_line_r_g_b_d.html" title="High-level class for template matching using the LINEMOD approach based on RGB and Depth data.">LineRGBD</a> detection.  <a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:af9f3fcc56ce3eed47b61a859cc09af14"><td class="memItemLeft" align="right" valign="top"><a id="af9f3fcc56ce3eed47b61a859cc09af14"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#af9f3fcc56ce3eed47b61a859cc09af14">LineRGBD</a> ()</td></tr>
<tr class="memdesc:af9f3fcc56ce3eed47b61a859cc09af14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor <br /></td></tr>
<tr class="separator:af9f3fcc56ce3eed47b61a859cc09af14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b9ffbe4c9da8fa1fd1c1c5c11c41067"><td class="memItemLeft" align="right" valign="top"><a id="a0b9ffbe4c9da8fa1fd1c1c5c11c41067"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a0b9ffbe4c9da8fa1fd1c1c5c11c41067">~LineRGBD</a> ()</td></tr>
<tr class="memdesc:a0b9ffbe4c9da8fa1fd1c1c5c11c41067"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor <br /></td></tr>
<tr class="separator:a0b9ffbe4c9da8fa1fd1c1c5c11c41067"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43299ced101ae893d58a46ad3196f78e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a43299ced101ae893d58a46ad3196f78e">loadTemplates</a> (const std::string &amp;file_name, size_t object_id=0)</td></tr>
<tr class="memdesc:a43299ced101ae893d58a46ad3196f78e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads templates from a LMT (LineMod Template) file. Overrides old templates.  <a href="classpcl_1_1_line_r_g_b_d.html#a43299ced101ae893d58a46ad3196f78e">更多...</a><br /></td></tr>
<tr class="separator:a43299ced101ae893d58a46ad3196f78e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:addfe3dafa53e643611a4ebf2886b6434"><td class="memItemLeft" align="right" valign="top"><a id="addfe3dafa53e643611a4ebf2886b6434"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>addTemplate</b> (const <a class="el" href="structpcl_1_1_sparse_quantized_multi_mod_template.html">SparseQuantizedMultiModTemplate</a> &amp;sqmmt, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> &gt; &amp;cloud, size_t object_id=0)</td></tr>
<tr class="separator:addfe3dafa53e643611a4ebf2886b6434"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0470a2c071a6371dd937c36ca4e50700"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a0470a2c071a6371dd937c36ca4e50700">setDetectionThreshold</a> (float threshold)</td></tr>
<tr class="memdesc:a0470a2c071a6371dd937c36ca4e50700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the threshold for the detection responses. Responses are between 0 and 1, where 1 is a best.  <a href="classpcl_1_1_line_r_g_b_d.html#a0470a2c071a6371dd937c36ca4e50700">更多...</a><br /></td></tr>
<tr class="separator:a0470a2c071a6371dd937c36ca4e50700"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d9fec3dc7b4f11e51c0b099ca148639"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a2d9fec3dc7b4f11e51c0b099ca148639">setGradientMagnitudeThreshold</a> (const float threshold)</td></tr>
<tr class="memdesc:a2d9fec3dc7b4f11e51c0b099ca148639"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the threshold on the magnitude of color gradients. Color gradients with a magnitude below this threshold are not considered in the detection process.  <a href="classpcl_1_1_line_r_g_b_d.html#a2d9fec3dc7b4f11e51c0b099ca148639">更多...</a><br /></td></tr>
<tr class="separator:a2d9fec3dc7b4f11e51c0b099ca148639"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acdad286f8f0e557afe8590ff4e6d8026"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#acdad286f8f0e557afe8590ff4e6d8026">setIntersectionVolumeThreshold</a> (const float threshold=1.0f)</td></tr>
<tr class="memdesc:acdad286f8f0e557afe8590ff4e6d8026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the threshold for the decision whether two detections of the same template are merged or not. If ratio between the intersection of the bounding boxes of two detections and the original bounding boxes is larger than the specified threshold then they are merged. If detection A overlaps with detection B and B with C than A, B, and C are merged. Threshold has to be between 0 and 1.  <a href="classpcl_1_1_line_r_g_b_d.html#acdad286f8f0e557afe8590ff4e6d8026">更多...</a><br /></td></tr>
<tr class="separator:acdad286f8f0e557afe8590ff4e6d8026"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad947dfb37a5d5f0c1e6ed2e7ef165fdd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#ad947dfb37a5d5f0c1e6ed2e7ef165fdd">setInputCloud</a> (const typename <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointXYZT &gt;::ConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:ad947dfb37a5d5f0c1e6ed2e7ef165fdd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the input cloud with xyz point coordinates. The cloud has to be organized.  <a href="classpcl_1_1_line_r_g_b_d.html#ad947dfb37a5d5f0c1e6ed2e7ef165fdd">更多...</a><br /></td></tr>
<tr class="separator:ad947dfb37a5d5f0c1e6ed2e7ef165fdd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad55523e1edc468703620be5cb9bc5338"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#ad55523e1edc468703620be5cb9bc5338">setInputColors</a> (const typename <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointRGBT &gt;::ConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:ad55523e1edc468703620be5cb9bc5338"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the input cloud with rgb values. The cloud has to be organized.  <a href="classpcl_1_1_line_r_g_b_d.html#ad55523e1edc468703620be5cb9bc5338">更多...</a><br /></td></tr>
<tr class="separator:ad55523e1edc468703620be5cb9bc5338"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a94b082a85ebcb7893a4e3afbf25a041a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a94b082a85ebcb7893a4e3afbf25a041a">createAndAddTemplate</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> &gt; &amp;cloud, const size_t object_id, const <a class="el" href="classpcl_1_1_mask_map.html">MaskMap</a> &amp;mask_xyz, const <a class="el" href="classpcl_1_1_mask_map.html">MaskMap</a> &amp;mask_rgb, const <a class="el" href="structpcl_1_1_region_x_y.html">RegionXY</a> &amp;region)</td></tr>
<tr class="memdesc:a94b082a85ebcb7893a4e3afbf25a041a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a template from the specified data and adds it to the matching queue.  <a href="classpcl_1_1_line_r_g_b_d.html#a94b082a85ebcb7893a4e3afbf25a041a">更多...</a><br /></td></tr>
<tr class="separator:a94b082a85ebcb7893a4e3afbf25a041a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04e2c0b8243551b559a9b78f90a8af31"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a04e2c0b8243551b559a9b78f90a8af31">detect</a> (std::vector&lt; typename <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::<a class="el" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">Detection</a> &gt; &amp;detections)</td></tr>
<tr class="memdesc:a04e2c0b8243551b559a9b78f90a8af31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Applies the detection process and fills the supplied vector with the detection instances.  <a href="classpcl_1_1_line_r_g_b_d.html#a04e2c0b8243551b559a9b78f90a8af31">更多...</a><br /></td></tr>
<tr class="separator:a04e2c0b8243551b559a9b78f90a8af31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a158f133218ce2923d2bc56572b9a7f95"><td class="memItemLeft" align="right" valign="top"><a id="a158f133218ce2923d2bc56572b9a7f95"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a158f133218ce2923d2bc56572b9a7f95">detectSemiScaleInvariant</a> (std::vector&lt; typename <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::<a class="el" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">Detection</a> &gt; &amp;detections, float min_scale=0.6944444f, float max_scale=1.44f, float scale_multiplier=1.2f)</td></tr>
<tr class="memdesc:a158f133218ce2923d2bc56572b9a7f95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Applies the detection process in a semi-scale-invariant manner. This is done by acutally scaling the template to different sizes. <br /></td></tr>
<tr class="separator:a158f133218ce2923d2bc56572b9a7f95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5aad0f7531ada96716df263851fd991"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#ad5aad0f7531ada96716df263851fd991">computeTransformedTemplatePoints</a> (const size_t detection_id, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> &gt; &amp;cloud)</td></tr>
<tr class="memdesc:ad5aad0f7531ada96716df263851fd991"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes and returns the point cloud of the specified detection. This is the template point cloud transformed to the detection coordinates. The detection ID refers to the last call of the method detect (...).  <a href="classpcl_1_1_line_r_g_b_d.html#ad5aad0f7531ada96716df263851fd991">更多...</a><br /></td></tr>
<tr class="separator:ad5aad0f7531ada96716df263851fd991"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae17eead2ec8f3c236cf8901d3e216356"><td class="memItemLeft" align="right" valign="top">std::vector&lt; size_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#ae17eead2ec8f3c236cf8901d3e216356">findObjectPointIndices</a> (const size_t detection_id)</td></tr>
<tr class="memdesc:ae17eead2ec8f3c236cf8901d3e216356"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the indices of the points in the input cloud which correspond to the specified detection. The detection ID refers to the last call of the method detect (...).  <a href="classpcl_1_1_line_r_g_b_d.html#ae17eead2ec8f3c236cf8901d3e216356">更多...</a><br /></td></tr>
<tr class="separator:ae17eead2ec8f3c236cf8901d3e216356"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public 属性</h2></td></tr>
<tr class="memitem:a0813e0759e864b9e98009a778e12c8c7"><td class="memItemLeft" align="right" valign="top"><a id="a0813e0759e864b9e98009a778e12c8c7"></a>
<a class="el" href="classpcl_1_1_l_i_n_e_m_o_d.html">pcl::LINEMOD</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">linemod_</a></td></tr>
<tr class="memdesc:a0813e0759e864b9e98009a778e12c8c7"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classpcl_1_1_l_i_n_e_m_o_d.html" title="Template matching using the LINEMOD approach.">LINEMOD</a> instance. <br /></td></tr>
<tr class="separator:a0813e0759e864b9e98009a778e12c8c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79eca58ec3037bc34da9f7ea0e616f97"><td class="memItemLeft" align="right" valign="top"><a id="a79eca58ec3037bc34da9f7ea0e616f97"></a>
<a class="el" href="classpcl_1_1_color_gradient_modality.html">pcl::ColorGradientModality</a>&lt; PointRGBT &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">color_gradient_mod_</a></td></tr>
<tr class="memdesc:a79eca58ec3037bc34da9f7ea0e616f97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Color gradient modality. <br /></td></tr>
<tr class="separator:a79eca58ec3037bc34da9f7ea0e616f97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90463997ca182bea387905995cd4ba5b"><td class="memItemLeft" align="right" valign="top"><a id="a90463997ca182bea387905995cd4ba5b"></a>
<a class="el" href="classpcl_1_1_surface_normal_modality.html">pcl::SurfaceNormalModality</a>&lt; PointXYZT &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a90463997ca182bea387905995cd4ba5b">surface_normal_mod_</a></td></tr>
<tr class="memdesc:a90463997ca182bea387905995cd4ba5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Surface normal modality. <br /></td></tr>
<tr class="separator:a90463997ca182bea387905995cd4ba5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0607678b69d79b3a17cd1dd41bde7bed"><td class="memItemLeft" align="right" valign="top"><a id="a0607678b69d79b3a17cd1dd41bde7bed"></a>
<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointXYZT &gt;::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a0607678b69d79b3a17cd1dd41bde7bed">cloud_xyz_</a></td></tr>
<tr class="memdesc:a0607678b69d79b3a17cd1dd41bde7bed"><td class="mdescLeft">&#160;</td><td class="mdescRight">XYZ point cloud. <br /></td></tr>
<tr class="separator:a0607678b69d79b3a17cd1dd41bde7bed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1beab8c5b441a6cd523b82be78f54a08"><td class="memItemLeft" align="right" valign="top"><a id="a1beab8c5b441a6cd523b82be78f54a08"></a>
<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointRGBT &gt;::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a1beab8c5b441a6cd523b82be78f54a08">cloud_rgb_</a></td></tr>
<tr class="memdesc:a1beab8c5b441a6cd523b82be78f54a08"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> point cloud. <br /></td></tr>
<tr class="separator:a1beab8c5b441a6cd523b82be78f54a08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac58a2a54fbc259d35b94ebf00a1c796c"><td class="memItemLeft" align="right" valign="top"><a id="ac58a2a54fbc259d35b94ebf00a1c796c"></a>
<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> &gt;::CloudVectorType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a></td></tr>
<tr class="memdesc:ac58a2a54fbc259d35b94ebf00a1c796c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Point clouds corresponding to the templates. <br /></td></tr>
<tr class="separator:ac58a2a54fbc259d35b94ebf00a1c796c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a612c6394336f457bfd2e680c49b75002"><td class="memItemLeft" align="right" valign="top"><a id="a612c6394336f457bfd2e680c49b75002"></a>
std::vector&lt; <a class="el" href="structpcl_1_1_bounding_box_x_y_z.html">pcl::BoundingBoxXYZ</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a></td></tr>
<tr class="memdesc:a612c6394336f457bfd2e680c49b75002"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bounding boxes corresonding to the templates. <br /></td></tr>
<tr class="separator:a612c6394336f457bfd2e680c49b75002"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afcdb6e02554bfada5911dee617232808"><td class="memItemLeft" align="right" valign="top"><a id="afcdb6e02554bfada5911dee617232808"></a>
std::vector&lt; size_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#afcdb6e02554bfada5911dee617232808">object_ids_</a></td></tr>
<tr class="memdesc:afcdb6e02554bfada5911dee617232808"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="class_object.html">Object</a> IDs corresponding to the templates. <br /></td></tr>
<tr class="separator:afcdb6e02554bfada5911dee617232808"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2850c85159ee7bffd95e68a9f96f9aa6"><td class="memItemLeft" align="right" valign="top"><a id="a2850c85159ee7bffd95e68a9f96f9aa6"></a>
std::vector&lt; typename <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::<a class="el" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">Detection</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a></td></tr>
<tr class="memdesc:a2850c85159ee7bffd95e68a9f96f9aa6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Detections from last call of method detect (...). <br /></td></tr>
<tr class="separator:a2850c85159ee7bffd95e68a9f96f9aa6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:a1c3432569c3c39a9b81b67c49fce2d0c"><td class="memItemLeft" align="right" valign="top">std::vector&lt; size_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a1c3432569c3c39a9b81b67c49fce2d0c">alignTemplatePoints</a> (const size_t detection_id)</td></tr>
<tr class="memdesc:a1c3432569c3c39a9b81b67c49fce2d0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Aligns the template points with the points found at the detection position of the specified detection. The detection ID refers to the last call of the method detect (...).  <a href="classpcl_1_1_line_r_g_b_d.html#a1c3432569c3c39a9b81b67c49fce2d0c">更多...</a><br /></td></tr>
<tr class="separator:a1c3432569c3c39a9b81b67c49fce2d0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c52af101442e978e0f020306ed95b5d"><td class="memItemLeft" align="right" valign="top"><a id="a1c52af101442e978e0f020306ed95b5d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a1c52af101442e978e0f020306ed95b5d">refineDetectionsAlongDepth</a> ()</td></tr>
<tr class="memdesc:a1c52af101442e978e0f020306ed95b5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refines the found detections along the depth. <br /></td></tr>
<tr class="separator:a1c52af101442e978e0f020306ed95b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a276ccfd0f7ac632f77d49ecc8caff121"><td class="memItemLeft" align="right" valign="top"><a id="a276ccfd0f7ac632f77d49ecc8caff121"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a276ccfd0f7ac632f77d49ecc8caff121">applyProjectiveDepthICPOnDetections</a> ()</td></tr>
<tr class="memdesc:a276ccfd0f7ac632f77d49ecc8caff121"><td class="mdescLeft">&#160;</td><td class="mdescRight">Applies projective ICP on detections to find their correct position in depth. <br /></td></tr>
<tr class="separator:a276ccfd0f7ac632f77d49ecc8caff121"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f5c97369811385a26856692d8422e90"><td class="memItemLeft" align="right" valign="top"><a id="a9f5c97369811385a26856692d8422e90"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a9f5c97369811385a26856692d8422e90">removeOverlappingDetections</a> ()</td></tr>
<tr class="memdesc:a9f5c97369811385a26856692d8422e90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks for overlapping detections, removes them and keeps only the strongest one. <br /></td></tr>
<tr class="separator:a9f5c97369811385a26856692d8422e90"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
静态 Protected 成员函数</h2></td></tr>
<tr class="memitem:a831d13aadaef7d895154c4c1f5747d23"><td class="memItemLeft" align="right" valign="top">static float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a831d13aadaef7d895154c4c1f5747d23">computeBoundingBoxIntersectionVolume</a> (const <a class="el" href="structpcl_1_1_bounding_box_x_y_z.html">BoundingBoxXYZ</a> &amp;box1, const <a class="el" href="structpcl_1_1_bounding_box_x_y_z.html">BoundingBoxXYZ</a> &amp;box2)</td></tr>
<tr class="memdesc:a831d13aadaef7d895154c4c1f5747d23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the volume of the intersection between two bounding boxes.  <a href="classpcl_1_1_line_r_g_b_d.html#a831d13aadaef7d895154c4c1f5747d23">更多...</a><br /></td></tr>
<tr class="separator:a831d13aadaef7d895154c4c1f5747d23"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:af17a00e4b06f54824d2cd0d451c9b2d1"><td class="memItemLeft" align="right" valign="top"><a id="af17a00e4b06f54824d2cd0d451c9b2d1"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#af17a00e4b06f54824d2cd0d451c9b2d1">readLTMHeader</a> (int fd, <a class="el" href="structpcl_1_1io_1_1_t_a_r_header.html">pcl::io::TARHeader</a> &amp;header)</td></tr>
<tr class="memdesc:af17a00e4b06f54824d2cd0d451c9b2d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read another LTM header chunk. <br /></td></tr>
<tr class="separator:af17a00e4b06f54824d2cd0d451c9b2d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a7b3b5780742852ca02cce124ae841955"><td class="memItemLeft" align="right" valign="top"><a id="a7b3b5780742852ca02cce124ae841955"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_line_r_g_b_d.html#a7b3b5780742852ca02cce124ae841955">intersection_volume_threshold_</a></td></tr>
<tr class="memdesc:a7b3b5780742852ca02cce124ae841955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intersection volume threshold. <br /></td></tr>
<tr class="separator:a7b3b5780742852ca02cce124ae841955"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointXYZT, typename PointRGBT = PointXYZT&gt;<br />
class pcl::LineRGBD&lt; PointXYZT, PointRGBT &gt;</h3>

<p>High-level class for template matching using the <a class="el" href="classpcl_1_1_l_i_n_e_m_o_d.html" title="Template matching using the LINEMOD approach.">LINEMOD</a> approach based on <a class="el" href="structpcl_1_1_r_g_b.html" title="A structure representing RGB color information.">RGB</a> and Depth data. </p>
<dl class="section author"><dt>作者</dt><dd>Stefan Holzer </dd></dl>
</div><h2 class="groupheader">成员函数说明</h2>
<a id="a1c3432569c3c39a9b81b67c49fce2d0c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c3432569c3c39a9b81b67c49fce2d0c">&#9670;&nbsp;</a></span>alignTemplatePoints()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::vector&lt;size_t&gt; <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::alignTemplatePoints </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>detection_id</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Aligns the template points with the points found at the detection position of the specified detection. The detection ID refers to the last call of the method detect (...). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">detection_id</td><td>The ID of the detection (according to the last call of the method detect (...)). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;      {</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        <span class="keywordflow">if</span> (detection_id &gt;= <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.size ())</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;          PCL_ERROR (<span class="stringliteral">&quot;ERROR pcl::LineRGBD::computeTransformedTemplatePoints - detection_id is out of bounds\n&quot;</span>);</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        <span class="comment">// TODO: compute transform from detection</span></div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        <span class="comment">// TODO: transform template points</span></div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        std::vector&lt;size_t&gt; vec;</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        <span class="keywordflow">return</span> (vec);</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a2850c85159ee7bffd95e68a9f96f9aa6"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">pcl::LineRGBD::detections_</a></div><div class="ttdeci">std::vector&lt; typename pcl::LineRGBD&lt; PointXYZT, PointRGBT &gt;::Detection &gt; detections_</div><div class="ttdoc">Detections from last call of method detect (...).</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:313</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a831d13aadaef7d895154c4c1f5747d23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a831d13aadaef7d895154c4c1f5747d23">&#9670;&nbsp;</a></span>computeBoundingBoxIntersectionVolume()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::computeBoundingBoxIntersectionVolume </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_bounding_box_x_y_z.html">BoundingBoxXYZ</a> &amp;&#160;</td>
          <td class="paramname"><em>box1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_bounding_box_x_y_z.html">BoundingBoxXYZ</a> &amp;&#160;</td>
          <td class="paramname"><em>box2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Computes the volume of the intersection between two bounding boxes. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">box1</td><td>First bounding box. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">box2</td><td>Second bounding box. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;{</div>
<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> x1_min = box1.x;</div>
<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> y1_min = box1.y;</div>
<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> z1_min = box1.z;</div>
<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> x1_max = box1.x + box1.width;</div>
<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> y1_max = box1.y + box1.height;</div>
<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> z1_max = box1.z + box1.depth;</div>
<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160; </div>
<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> x2_min = box2.x;</div>
<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> y2_min = box2.y;</div>
<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> z2_min = box2.z;</div>
<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> x2_max = box2.x + box2.width;</div>
<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> y2_max = box2.y + box2.height;</div>
<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> z2_max = box2.z + box2.depth;</div>
<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;  </div>
<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> xi_min = std::max (x1_min, x2_min);</div>
<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> yi_min = std::max (y1_min, y2_min);</div>
<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> zi_min = std::max (z1_min, z2_min);</div>
<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160; </div>
<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> xi_max = std::min (x1_max, x2_max);</div>
<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> yi_max = std::min (y1_max, y2_max);</div>
<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> zi_max = std::min (z1_max, z2_max);</div>
<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160; </div>
<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> intersection_width  = xi_max - xi_min;</div>
<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> intersection_height = yi_max - yi_min;</div>
<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> intersection_depth  = zi_max - zi_min;</div>
<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160; </div>
<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;  <span class="keywordflow">if</span> (intersection_width &lt;= 0.0f || intersection_height &lt;= 0.0f || intersection_depth &lt;= 0.0f)</div>
<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    <span class="keywordflow">return</span> 0.0f;</div>
<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160; </div>
<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> intersection_volume = intersection_width * intersection_height * intersection_depth;</div>
<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160; </div>
<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;  <span class="keywordflow">return</span> (intersection_volume);</div>
<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad5aad0f7531ada96716df263851fd991"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5aad0f7531ada96716df263851fd991">&#9670;&nbsp;</a></span>computeTransformedTemplatePoints()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::computeTransformedTemplatePoints </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>detection_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes and returns the point cloud of the specified detection. This is the template point cloud transformed to the detection coordinates. The detection ID refers to the last call of the method detect (...). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">detection_id</td><td>The ID of the detection (according to the last call of the method detect (...)). </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">cloud</td><td>The storage for the transformed points. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;{</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;  <span class="keywordflow">if</span> (detection_id &gt;= <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.size ())</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;ERROR pcl::LineRGBD::computeTransformedTemplatePoints - detection_id is out of bounds\n&quot;</span>);</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160; </div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> template_id = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>[detection_id].template_id;</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;  <span class="keyword">const</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;pcl::PointXYZRGBA&gt;</a> &amp; template_point_cloud = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>[template_id];</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  <span class="keyword">const</span> <a class="code" href="structpcl_1_1_bounding_box_x_y_z.html">pcl::BoundingBoxXYZ</a> &amp; template_bounding_box = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a>[template_id];</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;  <span class="keyword">const</span> <a class="code" href="structpcl_1_1_bounding_box_x_y_z.html">pcl::BoundingBoxXYZ</a> &amp; detection_bounding_box = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>[detection_id].bounding_box;</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160; </div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;  <span class="comment">//std::cerr &lt;&lt; &quot;detection: &quot; </span></div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;  <span class="comment">//  &lt;&lt; detection_bounding_box.x &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;  <span class="comment">//  &lt;&lt; detection_bounding_box.y &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;  <span class="comment">//  &lt;&lt; detection_bounding_box.z &lt;&lt; std::endl;</span></div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;  <span class="comment">//std::cerr &lt;&lt; &quot;template: &quot; </span></div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;  <span class="comment">//  &lt;&lt; template_bounding_box.x &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;  <span class="comment">//  &lt;&lt; template_bounding_box.y &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;  <span class="comment">//  &lt;&lt; template_bounding_box.z &lt;&lt; std::endl;</span></div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> translation_x = detection_bounding_box.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#a16450ce18154338681e032904c423f99">x</a> - template_bounding_box.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#a16450ce18154338681e032904c423f99">x</a>;</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> translation_y = detection_bounding_box.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#a74fecaefd54b5d549abee0806cc76f98">y</a> - template_bounding_box.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#a74fecaefd54b5d549abee0806cc76f98">y</a>;</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">float</span> translation_z = detection_bounding_box.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#ac7db1c7b64f050fec99b1d3bdd5f6475">z</a> - template_bounding_box.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#ac7db1c7b64f050fec99b1d3bdd5f6475">z</a>;</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160; </div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;  <span class="comment">//std::cerr &lt;&lt; &quot;translation: &quot; </span></div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  <span class="comment">//  &lt;&lt; translation_x &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  <span class="comment">//  &lt;&lt; translation_y &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  <span class="comment">//  &lt;&lt; translation_z &lt;&lt; std::endl;</span></div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> nr_points = template_point_cloud.size ();</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (nr_points);</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;  cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> point_index = 0; point_index &lt; nr_points; ++point_index)</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;  {</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> point = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[point_index];</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160; </div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    point.x += translation_x;</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    point.y += translation_y;</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    point.z += translation_z;</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160; </div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[point_index] = point;</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;  }</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a612c6394336f457bfd2e680c49b75002"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">pcl::LineRGBD::bounding_boxes_</a></div><div class="ttdeci">std::vector&lt; pcl::BoundingBoxXYZ &gt; bounding_boxes_</div><div class="ttdoc">Bounding boxes corresonding to the templates.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:308</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_ac58a2a54fbc259d35b94ebf00a1c796c"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">pcl::LineRGBD::template_point_clouds_</a></div><div class="ttdeci">pcl::PointCloud&lt; pcl::PointXYZRGBA &gt;::CloudVectorType template_point_clouds_</div><div class="ttdoc">Point clouds corresponding to the templates.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:306</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html"><div class="ttname"><a href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt; pcl::PointXYZRGBA &gt;</a></div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2185a6453f8ad905d7bdf7b45754a160"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">pcl::PointCloud::width</a></div><div class="ttdeci">uint32_t width</div><div class="ttdoc">The point cloud width (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:413</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2d60b6927b31ef89cd3b97e8173ea4aa"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">pcl::PointCloud::resize</a></div><div class="ttdeci">void resize(size_t n)</div><div class="ttdoc">Resize the cloud</div><div class="ttdef"><b>Definition:</b> point_cloud.h:455</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a4f34b45220c57f96607513ffad0d9582"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">pcl::PointCloud::height</a></div><div class="ttdeci">uint32_t height</div><div class="ttdoc">The point cloud height (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:415</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_af16a62638198313b9c093127c492c884"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">pcl::PointCloud::points</a></div><div class="ttdeci">std::vector&lt; PointT, Eigen::aligned_allocator&lt; PointT &gt; &gt; points</div><div class="ttdoc">The point data.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:410</div></div>
<div class="ttc" id="astructpcl_1_1_bounding_box_x_y_z_html"><div class="ttname"><a href="structpcl_1_1_bounding_box_x_y_z.html">pcl::BoundingBoxXYZ</a></div><div class="ttdef"><b>Definition:</b> line_rgbd.h:50</div></div>
<div class="ttc" id="astructpcl_1_1_bounding_box_x_y_z_html_a16450ce18154338681e032904c423f99"><div class="ttname"><a href="structpcl_1_1_bounding_box_x_y_z.html#a16450ce18154338681e032904c423f99">pcl::BoundingBoxXYZ::x</a></div><div class="ttdeci">float x</div><div class="ttdoc">X-coordinate of the upper left front point</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:55</div></div>
<div class="ttc" id="astructpcl_1_1_bounding_box_x_y_z_html_a74fecaefd54b5d549abee0806cc76f98"><div class="ttname"><a href="structpcl_1_1_bounding_box_x_y_z.html#a74fecaefd54b5d549abee0806cc76f98">pcl::BoundingBoxXYZ::y</a></div><div class="ttdeci">float y</div><div class="ttdoc">Y-coordinate of the upper left front point</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:57</div></div>
<div class="ttc" id="astructpcl_1_1_bounding_box_x_y_z_html_ac7db1c7b64f050fec99b1d3bdd5f6475"><div class="ttname"><a href="structpcl_1_1_bounding_box_x_y_z.html#ac7db1c7b64f050fec99b1d3bdd5f6475">pcl::BoundingBoxXYZ::z</a></div><div class="ttdeci">float z</div><div class="ttdoc">Z-coordinate of the upper left front point</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:59</div></div>
<div class="ttc" id="astructpcl_1_1_point_x_y_z_r_g_b_a_html"><div class="ttname"><a href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a></div><div class="ttdoc">A point structure representing Euclidean xyz coordinates, and the RGBA color.</div><div class="ttdef"><b>Definition:</b> point_types.hpp:540</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a94b082a85ebcb7893a4e3afbf25a041a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a94b082a85ebcb7893a4e3afbf25a041a">&#9670;&nbsp;</a></span>createAndAddTemplate()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::createAndAddTemplate </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>object_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_mask_map.html">MaskMap</a> &amp;&#160;</td>
          <td class="paramname"><em>mask_xyz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_mask_map.html">MaskMap</a> &amp;&#160;</td>
          <td class="paramname"><em>mask_rgb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structpcl_1_1_region_x_y.html">RegionXY</a> &amp;&#160;</td>
          <td class="paramname"><em>region</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Creates a template from the specified data and adds it to the matching queue. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir"></td><td class="paramname">cloud</td><td></td></tr>
    <tr><td class="paramdir"></td><td class="paramname">object_id</td><td></td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">mask_xyz</td><td>the mask that determine which parts of the xyz-modality are used for creating the template. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">mask_rgb</td><td>the mask that determine which parts of the rgb-modality are used for creating the template. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">region</td><td>the region which will be associated with the template (can be larger than the actual modality-maps). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;{</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="comment">// add point cloud</span></div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size () + 1);</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  <a class="code" href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">pcl::copyPointCloud</a> (cloud, <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>[<a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size () - 1]);</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  <span class="comment">// add template</span></div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#afcdb6e02554bfada5911dee617232808">object_ids_</a>.push_back (object_id);</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160; </div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="comment">// Compute 3D bounding boxes from the template point clouds</span></div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a>.resize (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size ());</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  {</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> i = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size () - 1;</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <a class="code" href="classpcl_1_1_point_cloud.html">PointCloud&lt;PointXYZRGBA&gt;</a> &amp; template_point_cloud = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>[i];</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    BoundingBoxXYZ &amp; bb = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a>[i];</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    bb.x = bb.y = bb.z = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    bb.width = bb.height = bb.depth = 0.0f;</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordtype">float</span> center_x = 0.0f;</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordtype">float</span> center_y = 0.0f;</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keywordtype">float</span> center_z = 0.0f;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordtype">float</span> min_x = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordtype">float</span> min_y = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="keywordtype">float</span> min_z = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keywordtype">float</span> max_x = -std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keywordtype">float</span> max_y = -std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keywordtype">float</span> max_z = -std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordtype">size_t</span> counter = 0;</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; template_point_cloud.size (); ++j)</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    {</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;      <span class="keyword">const</span> PointXYZRGBA &amp; p = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j];</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (p.x) || !pcl_isfinite (p.y) || !pcl_isfinite (p.z))</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;      min_x = std::min (min_x, p.x);</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;      min_y = std::min (min_y, p.y);</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;      min_z = std::min (min_z, p.z);</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;      max_x = std::max (max_x, p.x);</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;      max_y = std::max (max_y, p.y);</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;      max_z = std::max (max_z, p.z);</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;      center_x += p.x;</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;      center_y += p.y;</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;      center_z += p.z;</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      ++counter;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    }</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160; </div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    center_x /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    center_y /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    center_z /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    bb.width  = max_x - min_x;</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    bb.height = max_y - min_y;</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    bb.depth  = max_z - min_z;</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    bb.x = (min_x + bb.width / 2.0f) - center_x - bb.width / 2.0f;</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    bb.y = (min_y + bb.height / 2.0f) - center_y - bb.height / 2.0f;</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    bb.z = (min_z + bb.depth / 2.0f) - center_z - bb.depth / 2.0f;</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    for (<span class="keywordtype">size_t</span> j = 0; j &lt; template_point_cloud.size (); ++j)</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    {</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;      PointXYZRGBA p = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j];</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160; </div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (p.x) || !pcl_isfinite (p.y) || !pcl_isfinite (p.z))</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160; </div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;      p.x -= center_x;</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;      p.y -= center_y;</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;      p.z -= center_z;</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;      template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j] = p;</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    }</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;  }</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  std::vector&lt;pcl::QuantizableModality*&gt; modalities;</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  modalities.push_back (&amp;<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">color_gradient_mod_</a>);</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  modalities.push_back (&amp;<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a90463997ca182bea387905995cd4ba5b">surface_normal_mod_</a>);</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  std::vector&lt;MaskMap*&gt; masks;</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  masks.push_back (<span class="keyword">const_cast&lt;</span>MaskMap*<span class="keyword">&gt;</span> (&amp;mask_rgb));</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  masks.push_back (<span class="keyword">const_cast&lt;</span>MaskMap*<span class="keyword">&gt;</span> (&amp;mask_xyz));</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160; </div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">linemod_</a>.<a class="code" href="classpcl_1_1_l_i_n_e_m_o_d.html#adfdec3b719e5c48c7b048c069e05e2c2">createAndAddTemplate</a> (modalities, masks, region));</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_l_i_n_e_m_o_d_html_adfdec3b719e5c48c7b048c069e05e2c2"><div class="ttname"><a href="classpcl_1_1_l_i_n_e_m_o_d.html#adfdec3b719e5c48c7b048c069e05e2c2">pcl::LINEMOD::createAndAddTemplate</a></div><div class="ttdeci">int createAndAddTemplate(const std::vector&lt; QuantizableModality * &gt; &amp;modalities, const std::vector&lt; MaskMap * &gt; &amp;masks, const RegionXY &amp;region)</div><div class="ttdoc">Creates a template from the specified data and adds it to the matching queue.</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a0813e0759e864b9e98009a778e12c8c7"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">pcl::LineRGBD::linemod_</a></div><div class="ttdeci">pcl::LINEMOD linemod_</div><div class="ttdoc">LINEMOD instance.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:294</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a79eca58ec3037bc34da9f7ea0e616f97"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">pcl::LineRGBD::color_gradient_mod_</a></div><div class="ttdeci">pcl::ColorGradientModality&lt; PointRGBT &gt; color_gradient_mod_</div><div class="ttdoc">Color gradient modality.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:296</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a90463997ca182bea387905995cd4ba5b"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a90463997ca182bea387905995cd4ba5b">pcl::LineRGBD::surface_normal_mod_</a></div><div class="ttdeci">pcl::SurfaceNormalModality&lt; PointXYZT &gt; surface_normal_mod_</div><div class="ttdoc">Surface normal modality.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:298</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_afcdb6e02554bfada5911dee617232808"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#afcdb6e02554bfada5911dee617232808">pcl::LineRGBD::object_ids_</a></div><div class="ttdeci">std::vector&lt; size_t &gt; object_ids_</div><div class="ttdoc">Object IDs corresponding to the templates.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:310</div></div>
<div class="ttc" id="agroup__common_html_gaa65b1c8d782e7b776ae682679d2d948f"><div class="ttname"><a href="group__common.html#gaa65b1c8d782e7b776ae682679d2d948f">pcl::copyPointCloud</a></div><div class="ttdeci">PCL_EXPORTS void copyPointCloud(const pcl::PCLPointCloud2 &amp;cloud_in, const std::vector&lt; int &gt; &amp;indices, pcl::PCLPointCloud2 &amp;cloud_out)</div><div class="ttdoc">Extract the indices of a given point cloud as a new point cloud</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a04e2c0b8243551b559a9b78f90a8af31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a04e2c0b8243551b559a9b78f90a8af31">&#9670;&nbsp;</a></span>detect()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::detect </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; typename <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::<a class="el" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">Detection</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>detections</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Applies the detection process and fills the supplied vector with the detection instances. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">detections</td><td>The storage for the detection instances. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;{</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  std::vector&lt;pcl::QuantizableModality*&gt; modalities;</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  modalities.push_back (&amp;<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">color_gradient_mod_</a>);</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;  modalities.push_back (&amp;<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a90463997ca182bea387905995cd4ba5b">surface_normal_mod_</a>);</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160; </div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;  std::vector&lt;pcl::LINEMODDetection&gt; linemod_detections;</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">linemod_</a>.<a class="code" href="classpcl_1_1_l_i_n_e_m_o_d.html#ab8127a94ec03bf05667aa896ff19d9d6">detectTemplates</a> (modalities, linemod_detections);</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160; </div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.clear ();</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.reserve (linemod_detections.size ());</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;  detections.clear ();</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  detections.reserve (linemod_detections.size ());</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> detection_id = 0; detection_id &lt; linemod_detections.size (); ++detection_id)</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;  {</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    <a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html">pcl::LINEMODDetection</a> &amp; linemod_detection = linemod_detections[detection_id];</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160; </div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="keyword">typename</span> <a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">pcl::LineRGBD&lt;PointXYZT, PointRGBT&gt;::Detection</a> detection;</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#aa4ba79365eacaca53febd469b2c7cb95">template_id</a> = linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a5b0ae6f2aa1d3a67467d5890e5ee4430">template_id</a>;</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a371bf3ae5d566bf5bced79f137dee7e6">object_id</a> = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#afcdb6e02554bfada5911dee617232808">object_ids_</a>[linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a5b0ae6f2aa1d3a67467d5890e5ee4430">template_id</a>];</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a3f6202bca884484b2ef7a9ca0edd2bbc">detection_id</a> = detection_id;</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#ab480cd05d1d41fd906de543a3b5276cc">response</a> = linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a8d1499ff25f160543569ddd6feefb805">score</a>;</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160; </div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    <span class="comment">// compute bounding box:</span></div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    <span class="comment">// we assume that the bounding boxes of the templates are relative to the center of mass </span></div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <span class="comment">// of the template points; so we also compute the center of mass of the points</span></div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    <span class="comment">// covered by the </span></div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160; </div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    <span class="keyword">const</span> <a class="code" href="structpcl_1_1_sparse_quantized_multi_mod_template.html">pcl::SparseQuantizedMultiModTemplate</a> &amp; linemod_template = </div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;      <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">linemod_</a>.<a class="code" href="classpcl_1_1_l_i_n_e_m_o_d.html#a349480f92ab9fc63abf848faeb4b1d49">getTemplate</a> (linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a5b0ae6f2aa1d3a67467d5890e5ee4430">template_id</a>);</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160; </div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_x = std::max (linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#ab79e94254c59b9f0f1445dbf8489ab36">x</a>, 0);</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_y = std::max (linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a6a0b620be4a33b69bf2fac09f2ff8f0a">y</a>, 0);</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> end_x = std::min (<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span> (start_x + linemod_template.<a class="code" href="structpcl_1_1_sparse_quantized_multi_mod_template.html#a7a92c3494f0dfad67da6bb001c3bc63c">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#a2040926ab029db2fb8956e8c4009f273">width</a>),</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                                   <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0607678b69d79b3a17cd1dd41bde7bed">cloud_xyz_</a>-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>));</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> end_y = std::min (<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span> (start_y + linemod_template.<a class="code" href="structpcl_1_1_sparse_quantized_multi_mod_template.html#a7a92c3494f0dfad67da6bb001c3bc63c">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#afd3791c009b1520b7b2b5c81faa044b8">height</a>),</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;                                   <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0607678b69d79b3a17cd1dd41bde7bed">cloud_xyz_</a>-&gt;<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>));</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160; </div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#adb3f9494ff5217fe319280ae0807fb22">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#a08cedb5e7c6d6fc6abe758a91acbb9aa">x</a> = linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#ab79e94254c59b9f0f1445dbf8489ab36">x</a>;</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#adb3f9494ff5217fe319280ae0807fb22">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#afade349621bae141febb8220469de8bb">y</a> = linemod_detection.<a class="code" href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a6a0b620be4a33b69bf2fac09f2ff8f0a">y</a>;</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#adb3f9494ff5217fe319280ae0807fb22">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#a2040926ab029db2fb8956e8c4009f273">width</a>  = linemod_template.<a class="code" href="structpcl_1_1_sparse_quantized_multi_mod_template.html#a7a92c3494f0dfad67da6bb001c3bc63c">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#a2040926ab029db2fb8956e8c4009f273">width</a>;</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#adb3f9494ff5217fe319280ae0807fb22">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#afd3791c009b1520b7b2b5c81faa044b8">height</a> = linemod_template.<a class="code" href="structpcl_1_1_sparse_quantized_multi_mod_template.html#a7a92c3494f0dfad67da6bb001c3bc63c">region</a>.<a class="code" href="structpcl_1_1_region_x_y.html#afd3791c009b1520b7b2b5c81faa044b8">height</a>;</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160; </div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="comment">//std::cerr &lt;&lt; &quot;detection region: &quot; &lt;&lt; linemod_detection.x &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="comment">//  &lt;&lt; linemod_detection.y &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="comment">//  &lt;&lt; linemod_template.region.width &lt;&lt; &quot;, &quot;</span></div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="comment">//  &lt;&lt; linemod_template.region.height &lt;&lt; std::endl;</span></div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160; </div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keywordtype">float</span> center_x = 0.0f;</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    <span class="keywordtype">float</span> center_y = 0.0f;</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="keywordtype">float</span> center_z = 0.0f;</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    <span class="keywordtype">size_t</span> counter = 0;</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> row_index = start_y; row_index &lt; end_y; ++row_index)</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    {</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> col_index = start_x; col_index &lt; end_x; ++col_index)</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      {</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        <span class="keyword">const</span> PointXYZT &amp; point = (*cloud_xyz_) (col_index, row_index);</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160; </div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        <span class="keywordflow">if</span> (pcl_isfinite (point.x) &amp;&amp; pcl_isfinite (point.y) &amp;&amp; pcl_isfinite (point.z))</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        {</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;          center_x += point.x;</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;          center_y += point.y;</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;          center_z += point.z;</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;          ++counter;</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        }</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;      }</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    }</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">float</span> inv_counter = 1.0f / <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    center_x *= inv_counter;</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    center_y *= inv_counter;</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    center_z *= inv_counter;</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160; </div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <a class="code" href="structpcl_1_1_bounding_box_x_y_z.html">pcl::BoundingBoxXYZ</a> template_bounding_box = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a>[detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#aa4ba79365eacaca53febd469b2c7cb95">template_id</a>];</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160; </div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a5391c8dca3c215eca707a096f93fa758">bounding_box</a> = template_bounding_box;</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a5391c8dca3c215eca707a096f93fa758">bounding_box</a>.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#a16450ce18154338681e032904c423f99">x</a> += center_x;</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a5391c8dca3c215eca707a096f93fa758">bounding_box</a>.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#a74fecaefd54b5d549abee0806cc76f98">y</a> += center_y;</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    detection.<a class="code" href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a5391c8dca3c215eca707a096f93fa758">bounding_box</a>.<a class="code" href="structpcl_1_1_bounding_box_x_y_z.html#ac7db1c7b64f050fec99b1d3bdd5f6475">z</a> += center_z;</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160; </div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.push_back (detection);</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  }</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160; </div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  <span class="comment">// refine detections along depth</span></div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a1c52af101442e978e0f020306ed95b5d">refineDetectionsAlongDepth</a> ();</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  <span class="comment">//applyprojectivedepthicpondetections();</span></div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160; </div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="comment">// remove overlaps</span></div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a9f5c97369811385a26856692d8422e90">removeOverlappingDetections</a> ();</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160; </div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> detection_index = 0; detection_index &lt; <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.size (); ++detection_index)</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  {</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    detections.push_back (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>[detection_index]);</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  }</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_l_i_n_e_m_o_d_html_a349480f92ab9fc63abf848faeb4b1d49"><div class="ttname"><a href="classpcl_1_1_l_i_n_e_m_o_d.html#a349480f92ab9fc63abf848faeb4b1d49">pcl::LINEMOD::getTemplate</a></div><div class="ttdeci">const SparseQuantizedMultiModTemplate &amp; getTemplate(int template_id) const</div><div class="ttdoc">Returns the template with the specified ID.</div><div class="ttdef"><b>Definition:</b> linemod.h:422</div></div>
<div class="ttc" id="aclasspcl_1_1_l_i_n_e_m_o_d_html_ab8127a94ec03bf05667aa896ff19d9d6"><div class="ttname"><a href="classpcl_1_1_l_i_n_e_m_o_d.html#ab8127a94ec03bf05667aa896ff19d9d6">pcl::LINEMOD::detectTemplates</a></div><div class="ttdeci">void detectTemplates(const std::vector&lt; QuantizableModality * &gt; &amp;modalities, std::vector&lt; LINEMODDetection &gt; &amp;detections) const</div><div class="ttdoc">Detects the stored templates in the supplied modality data.</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a0607678b69d79b3a17cd1dd41bde7bed"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a0607678b69d79b3a17cd1dd41bde7bed">pcl::LineRGBD::cloud_xyz_</a></div><div class="ttdeci">pcl::PointCloud&lt; PointXYZT &gt;::ConstPtr cloud_xyz_</div><div class="ttdoc">XYZ point cloud.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:301</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a1c52af101442e978e0f020306ed95b5d"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a1c52af101442e978e0f020306ed95b5d">pcl::LineRGBD::refineDetectionsAlongDepth</a></div><div class="ttdeci">void refineDetectionsAlongDepth()</div><div class="ttdoc">Refines the found detections along the depth.</div><div class="ttdef"><b>Definition:</b> line_rgbd.hpp:658</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a9f5c97369811385a26856692d8422e90"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a9f5c97369811385a26856692d8422e90">pcl::LineRGBD::removeOverlappingDetections</a></div><div class="ttdeci">void removeOverlappingDetections()</div><div class="ttdoc">Checks for overlapping detections, removes them and keeps only the strongest one.</div><div class="ttdef"><b>Definition:</b> line_rgbd.hpp:819</div></div>
<div class="ttc" id="astructpcl_1_1_l_i_n_e_m_o_d_detection_html"><div class="ttname"><a href="structpcl_1_1_l_i_n_e_m_o_d_detection.html">pcl::LINEMODDetection</a></div><div class="ttdoc">Represents a detection of a template using the LINEMOD approach.</div><div class="ttdef"><b>Definition:</b> linemod.h:315</div></div>
<div class="ttc" id="astructpcl_1_1_l_i_n_e_m_o_d_detection_html_a5b0ae6f2aa1d3a67467d5890e5ee4430"><div class="ttname"><a href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a5b0ae6f2aa1d3a67467d5890e5ee4430">pcl::LINEMODDetection::template_id</a></div><div class="ttdeci">int template_id</div><div class="ttdoc">ID of the detected template.</div><div class="ttdef"><b>Definition:</b> linemod.h:324</div></div>
<div class="ttc" id="astructpcl_1_1_l_i_n_e_m_o_d_detection_html_a6a0b620be4a33b69bf2fac09f2ff8f0a"><div class="ttname"><a href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a6a0b620be4a33b69bf2fac09f2ff8f0a">pcl::LINEMODDetection::y</a></div><div class="ttdeci">int y</div><div class="ttdoc">y-position of the detection.</div><div class="ttdef"><b>Definition:</b> linemod.h:322</div></div>
<div class="ttc" id="astructpcl_1_1_l_i_n_e_m_o_d_detection_html_a8d1499ff25f160543569ddd6feefb805"><div class="ttname"><a href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#a8d1499ff25f160543569ddd6feefb805">pcl::LINEMODDetection::score</a></div><div class="ttdeci">float score</div><div class="ttdoc">score of the detection.</div><div class="ttdef"><b>Definition:</b> linemod.h:326</div></div>
<div class="ttc" id="astructpcl_1_1_l_i_n_e_m_o_d_detection_html_ab79e94254c59b9f0f1445dbf8489ab36"><div class="ttname"><a href="structpcl_1_1_l_i_n_e_m_o_d_detection.html#ab79e94254c59b9f0f1445dbf8489ab36">pcl::LINEMODDetection::x</a></div><div class="ttdeci">int x</div><div class="ttdoc">x-position of the detection.</div><div class="ttdef"><b>Definition:</b> linemod.h:320</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html">pcl::LineRGBD::Detection</a></div><div class="ttdoc">A LineRGBD detection.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:79</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html_a371bf3ae5d566bf5bced79f137dee7e6"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a371bf3ae5d566bf5bced79f137dee7e6">pcl::LineRGBD::Detection::object_id</a></div><div class="ttdeci">size_t object_id</div><div class="ttdoc">The ID of the object corresponding to the template.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:86</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html_a3f6202bca884484b2ef7a9ca0edd2bbc"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a3f6202bca884484b2ef7a9ca0edd2bbc">pcl::LineRGBD::Detection::detection_id</a></div><div class="ttdeci">size_t detection_id</div><div class="ttdoc">The ID of this detection. This is only valid for the last call of the method detect (....</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:88</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html_a5391c8dca3c215eca707a096f93fa758"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#a5391c8dca3c215eca707a096f93fa758">pcl::LineRGBD::Detection::bounding_box</a></div><div class="ttdeci">BoundingBoxXYZ bounding_box</div><div class="ttdoc">The 3D bounding box of the detection.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:92</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html_aa4ba79365eacaca53febd469b2c7cb95"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#aa4ba79365eacaca53febd469b2c7cb95">pcl::LineRGBD::Detection::template_id</a></div><div class="ttdeci">size_t template_id</div><div class="ttdoc">The ID of the template.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:84</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html_ab480cd05d1d41fd906de543a3b5276cc"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#ab480cd05d1d41fd906de543a3b5276cc">pcl::LineRGBD::Detection::response</a></div><div class="ttdeci">float response</div><div class="ttdoc">The response of this detection. Responses are between 0 and 1, where 1 is best.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:90</div></div>
<div class="ttc" id="astructpcl_1_1_line_r_g_b_d_1_1_detection_html_adb3f9494ff5217fe319280ae0807fb22"><div class="ttname"><a href="structpcl_1_1_line_r_g_b_d_1_1_detection.html#adb3f9494ff5217fe319280ae0807fb22">pcl::LineRGBD::Detection::region</a></div><div class="ttdeci">RegionXY region</div><div class="ttdoc">The 2D template region of the detection.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:94</div></div>
<div class="ttc" id="astructpcl_1_1_region_x_y_html_a08cedb5e7c6d6fc6abe758a91acbb9aa"><div class="ttname"><a href="structpcl_1_1_region_x_y.html#a08cedb5e7c6d6fc6abe758a91acbb9aa">pcl::RegionXY::x</a></div><div class="ttdeci">int x</div><div class="ttdoc">x-position of the region.</div><div class="ttdef"><b>Definition:</b> region_xy.h:88</div></div>
<div class="ttc" id="astructpcl_1_1_region_x_y_html_a2040926ab029db2fb8956e8c4009f273"><div class="ttname"><a href="structpcl_1_1_region_x_y.html#a2040926ab029db2fb8956e8c4009f273">pcl::RegionXY::width</a></div><div class="ttdeci">int width</div><div class="ttdoc">width of the region.</div><div class="ttdef"><b>Definition:</b> region_xy.h:92</div></div>
<div class="ttc" id="astructpcl_1_1_region_x_y_html_afade349621bae141febb8220469de8bb"><div class="ttname"><a href="structpcl_1_1_region_x_y.html#afade349621bae141febb8220469de8bb">pcl::RegionXY::y</a></div><div class="ttdeci">int y</div><div class="ttdoc">y-position of the region.</div><div class="ttdef"><b>Definition:</b> region_xy.h:90</div></div>
<div class="ttc" id="astructpcl_1_1_region_x_y_html_afd3791c009b1520b7b2b5c81faa044b8"><div class="ttname"><a href="structpcl_1_1_region_x_y.html#afd3791c009b1520b7b2b5c81faa044b8">pcl::RegionXY::height</a></div><div class="ttdeci">int height</div><div class="ttdoc">height of the region.</div><div class="ttdef"><b>Definition:</b> region_xy.h:94</div></div>
<div class="ttc" id="astructpcl_1_1_sparse_quantized_multi_mod_template_html"><div class="ttname"><a href="structpcl_1_1_sparse_quantized_multi_mod_template.html">pcl::SparseQuantizedMultiModTemplate</a></div><div class="ttdoc">A multi-modality template constructed from a set of quantized multi-modality features.</div><div class="ttdef"><b>Definition:</b> sparse_quantized_multi_mod_template.h:110</div></div>
<div class="ttc" id="astructpcl_1_1_sparse_quantized_multi_mod_template_html_a7a92c3494f0dfad67da6bb001c3bc63c"><div class="ttname"><a href="structpcl_1_1_sparse_quantized_multi_mod_template.html#a7a92c3494f0dfad67da6bb001c3bc63c">pcl::SparseQuantizedMultiModTemplate::region</a></div><div class="ttdeci">RegionXY region</div><div class="ttdoc">The region assigned to the template.</div><div class="ttdef"><b>Definition:</b> sparse_quantized_multi_mod_template.h:118</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ae17eead2ec8f3c236cf8901d3e216356"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae17eead2ec8f3c236cf8901d3e216356">&#9670;&nbsp;</a></span>findObjectPointIndices()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::vector&lt;size_t&gt; <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::findObjectPointIndices </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>detection_id</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Finds the indices of the points in the input cloud which correspond to the specified detection. The detection ID refers to the last call of the method detect (...). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">detection_id</td><td>The ID of the detection (according to the last call of the method detect (...)). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;      {</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        <span class="keywordflow">if</span> (detection_id &gt;= <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a2850c85159ee7bffd95e68a9f96f9aa6">detections_</a>.size ())</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;          PCL_ERROR (<span class="stringliteral">&quot;ERROR pcl::LineRGBD::computeTransformedTemplatePoints - detection_id is out of bounds\n&quot;</span>);</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        <span class="comment">// TODO: compute transform from detection</span></div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        <span class="comment">// TODO: transform template points</span></div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        std::vector&lt;size_t&gt; vec;</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="keywordflow">return</span> (vec);</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a43299ced101ae893d58a46ad3196f78e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43299ced101ae893d58a46ad3196f78e">&#9670;&nbsp;</a></span>loadTemplates()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::loadTemplates </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>file_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>object_id</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Loads templates from a LMT (LineMod Template) file. Overrides old templates. </p>
<p>LineMod Template files are TAR files that store pairs of PCD datasets together with their <a class="el" href="classpcl_1_1_l_i_n_e_m_o_d.html" title="Template matching using the LINEMOD approach.">LINEMOD</a> signatures in <a class="el" href="structpcl_1_1_sparse_quantized_multi_mod_template.html">SparseQuantizedMultiModTemplate</a> format.</p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">file_name</td><td>The name of the file that stores the templates. </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">object_id</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>true, if the operation was successful, false otherwise. </dd></dl>
<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <span class="comment">// Open the file</span></div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordtype">int</span> ltm_fd = pcl_open (file_name.c_str (), O_RDONLY);</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keywordflow">if</span> (ltm_fd == -1)</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  </div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <span class="keywordtype">int</span> ltm_offset = 0;</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <a class="code" href="structpcl_1_1io_1_1_t_a_r_header.html">pcl::io::TARHeader</a> ltm_header;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  PCDReader pcd_reader;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  std::string pcd_ext (<span class="stringliteral">&quot;.pcd&quot;</span>);</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  std::string sqmmt_ext (<span class="stringliteral">&quot;.sqmmt&quot;</span>);</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="comment">// While there still is an LTM header to be read</span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="keywordflow">while</span> (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#af17a00e4b06f54824d2cd0d451c9b2d1">readLTMHeader</a> (ltm_fd, ltm_header))</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  {</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    ltm_offset += 512;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="comment">// Search for extension</span></div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    std::string chunk_name (ltm_header.file_name);</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    std::transform (chunk_name.begin (), chunk_name.end (), chunk_name.begin (), ::tolower);</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    std::string::size_type it;</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordflow">if</span> ((it = chunk_name.find (pcd_ext)) != std::string::npos &amp;&amp;</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        (pcd_ext.size () - (chunk_name.size () - it)) == 0)</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    {</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;      PCL_DEBUG (<span class="stringliteral">&quot;[pcl::LineRGBD::loadTemplates] Reading and parsing %s as a PCD file.\n&quot;</span>, chunk_name.c_str ());</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      <span class="comment">// Read the next PCD file</span></div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size () + 1);</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      pcd_reader.read (file_name, <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>[<a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size () - 1], ltm_offset);</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;      <span class="comment">// Increment the offset for the next file</span></div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      ltm_offset += (ltm_header.<a class="code" href="structpcl_1_1io_1_1_t_a_r_header.html#a454d9e608b1311a6761804f6361395db">getFileSize</a> ()) + (512 - ltm_header.<a class="code" href="structpcl_1_1io_1_1_t_a_r_header.html#a454d9e608b1311a6761804f6361395db">getFileSize</a> () % 512);</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    }</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((it = chunk_name.find (sqmmt_ext)) != std::string::npos &amp;&amp;</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;             (sqmmt_ext.size () - (chunk_name.size () - it)) == 0)</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    {</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;      PCL_DEBUG (<span class="stringliteral">&quot;[pcl::LineRGBD::loadTemplates] Reading and parsing %s as a SQMMT file.\n&quot;</span>, chunk_name.c_str ());</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fsize = ltm_header.<a class="code" href="structpcl_1_1io_1_1_t_a_r_header.html#a454d9e608b1311a6761804f6361395db">getFileSize</a> ();</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;      <span class="keywordtype">char</span> *buffer = <span class="keyword">new</span> <span class="keywordtype">char</span>[fsize];</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;      <span class="keywordtype">int</span> result = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (::read (ltm_fd, <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span> (&amp;buffer[0]), fsize));</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;      <span class="keywordflow">if</span> (result == -1)</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;      {</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="keyword">delete</span> [] buffer;</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        PCL_ERROR (<span class="stringliteral">&quot;[pcl::LineRGBD::loadTemplates] Error reading SQMMT template from file!\n&quot;</span>);</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      }</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      <span class="comment">// Read a SQMMT file</span></div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      std::stringstream stream (std::stringstream::in | std::stringstream::out | std::stringstream::binary);</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      stream.write (buffer, fsize);</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      SparseQuantizedMultiModTemplate sqmmt;</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;      sqmmt.deserialize (stream);</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">linemod_</a>.<a class="code" href="classpcl_1_1_l_i_n_e_m_o_d.html#ad5a23ca2b02d8dd708319543146b1c85">addTemplate</a> (sqmmt);</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;      <a class="code" href="classpcl_1_1_line_r_g_b_d.html#afcdb6e02554bfada5911dee617232808">object_ids_</a>.push_back (object_id);</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;      <span class="comment">// Increment the offset for the next file</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;      ltm_offset += (ltm_header.<a class="code" href="structpcl_1_1io_1_1_t_a_r_header.html#a454d9e608b1311a6761804f6361395db">getFileSize</a> ()) + (512 - ltm_header.<a class="code" href="structpcl_1_1io_1_1_t_a_r_header.html#a454d9e608b1311a6761804f6361395db">getFileSize</a> () % 512);</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;      <span class="keyword">delete</span> [] buffer;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    }</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160; </div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (pcl_lseek (ltm_fd, ltm_offset, SEEK_SET)) &lt; 0)</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  }</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  <span class="comment">// Close the file</span></div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  pcl_close (ltm_fd);</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  <span class="comment">// Compute 3D bounding boxes from the template point clouds</span></div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a>.resize (<a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size ());</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>.size (); ++i)</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;  {</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <a class="code" href="classpcl_1_1_point_cloud.html">PointCloud&lt;PointXYZRGBA&gt;</a> &amp; template_point_cloud = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#ac58a2a54fbc259d35b94ebf00a1c796c">template_point_clouds_</a>[i];</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    BoundingBoxXYZ &amp; bb = <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a612c6394336f457bfd2e680c49b75002">bounding_boxes_</a>[i];</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    bb.x = bb.y = bb.z = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    bb.width = bb.height = bb.depth = 0.0f;</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordtype">float</span> center_x = 0.0f;</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordtype">float</span> center_y = 0.0f;</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordtype">float</span> center_z = 0.0f;</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="keywordtype">float</span> min_x = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordtype">float</span> min_y = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keywordtype">float</span> min_z = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordtype">float</span> max_x = -std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordtype">float</span> max_y = -std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="keywordtype">float</span> max_z = -std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordtype">size_t</span> counter = 0;</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; template_point_cloud.size (); ++j)</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    {</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      <span class="keyword">const</span> PointXYZRGBA &amp; p = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j];</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (p.x) || !pcl_isfinite (p.y) || !pcl_isfinite (p.z))</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;      min_x = std::min (min_x, p.x);</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      min_y = std::min (min_y, p.y);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      min_z = std::min (min_z, p.z);</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      max_x = std::max (max_x, p.x);</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;      max_y = std::max (max_y, p.y);</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;      max_z = std::max (max_z, p.z);</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;      center_x += p.x;</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;      center_y += p.y;</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;      center_z += p.z;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;      ++counter;</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    }</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    center_x /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    center_y /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    center_z /= <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (counter);</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    bb.width  = max_x - min_x;</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    bb.height = max_y - min_y;</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    bb.depth  = max_z - min_z;</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    bb.x = (min_x + bb.width / 2.0f) - center_x - bb.width / 2.0f;</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    bb.y = (min_y + bb.height / 2.0f) - center_y - bb.height / 2.0f;</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    bb.z = (min_z + bb.depth / 2.0f) - center_z - bb.depth / 2.0f;</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    for (<span class="keywordtype">size_t</span> j = 0; j &lt; template_point_cloud.size (); ++j)</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    {</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;      PointXYZRGBA p = template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j];</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;      <span class="keywordflow">if</span> (!pcl_isfinite (p.x) || !pcl_isfinite (p.y) || !pcl_isfinite (p.z))</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;      p.x -= center_x;</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;      p.y -= center_y;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      p.z -= center_z;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;      template_point_cloud.<a class="code" href="classpcl_1_1_point_cloud.html#af16a62638198313b9c093127c492c884">points</a>[j] = p;</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    }</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  }</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_l_i_n_e_m_o_d_html_ad5a23ca2b02d8dd708319543146b1c85"><div class="ttname"><a href="classpcl_1_1_l_i_n_e_m_o_d.html#ad5a23ca2b02d8dd708319543146b1c85">pcl::LINEMOD::addTemplate</a></div><div class="ttdeci">int addTemplate(const SparseQuantizedMultiModTemplate &amp;linemod_template)</div><div class="ttdoc">Adds the specified template to the matching queue.</div></div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_af17a00e4b06f54824d2cd0d451c9b2d1"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#af17a00e4b06f54824d2cd0d451c9b2d1">pcl::LineRGBD::readLTMHeader</a></div><div class="ttdeci">bool readLTMHeader(int fd, pcl::io::TARHeader &amp;header)</div><div class="ttdoc">Read another LTM header chunk.</div><div class="ttdef"><b>Definition:</b> line_rgbd.hpp:62</div></div>
<div class="ttc" id="astructpcl_1_1io_1_1_t_a_r_header_html"><div class="ttname"><a href="structpcl_1_1io_1_1_t_a_r_header.html">pcl::io::TARHeader</a></div><div class="ttdoc">A TAR file's header, as described on http://en.wikipedia.org/wiki/Tar_%28file_format%29.</div><div class="ttdef"><b>Definition:</b> tar.h:51</div></div>
<div class="ttc" id="astructpcl_1_1io_1_1_t_a_r_header_html_a454d9e608b1311a6761804f6361395db"><div class="ttname"><a href="structpcl_1_1io_1_1_t_a_r_header.html#a454d9e608b1311a6761804f6361395db">pcl::io::TARHeader::getFileSize</a></div><div class="ttdeci">unsigned int getFileSize()</div><div class="ttdoc">get file size</div><div class="ttdef"><b>Definition:</b> tar.h:72</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a0470a2c071a6371dd937c36ca4e50700"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0470a2c071a6371dd937c36ca4e50700">&#9670;&nbsp;</a></span>setDetectionThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::setDetectionThreshold </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>threshold</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the threshold for the detection responses. Responses are between 0 and 1, where 1 is a best. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>The threshold used to decide where a template is detected. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      {</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0813e0759e864b9e98009a778e12c8c7">linemod_</a>.<a class="code" href="classpcl_1_1_l_i_n_e_m_o_d.html#a618e2dfbb8420926a8cf47592a53857e">setDetectionThreshold</a> (threshold);</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_l_i_n_e_m_o_d_html_a618e2dfbb8420926a8cf47592a53857e"><div class="ttname"><a href="classpcl_1_1_l_i_n_e_m_o_d.html#a618e2dfbb8420926a8cf47592a53857e">pcl::LINEMOD::setDetectionThreshold</a></div><div class="ttdeci">void setDetectionThreshold(float threshold)</div><div class="ttdoc">Sets the detection threshold.</div><div class="ttdef"><b>Definition:</b> linemod.h:395</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a2d9fec3dc7b4f11e51c0b099ca148639"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d9fec3dc7b4f11e51c0b099ca148639">&#9670;&nbsp;</a></span>setGradientMagnitudeThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::setGradientMagnitudeThreshold </td>
          <td>(</td>
          <td class="paramtype">const float&#160;</td>
          <td class="paramname"><em>threshold</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the threshold on the magnitude of color gradients. Color gradients with a magnitude below this threshold are not considered in the detection process. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>The threshold on the magnitude of color gradients. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;      {</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">color_gradient_mod_</a>.setGradientMagnitudeThreshold (threshold);</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad947dfb37a5d5f0c1e6ed2e7ef165fdd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad947dfb37a5d5f0c1e6ed2e7ef165fdd">&#9670;&nbsp;</a></span>setInputCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::setInputCloud </td>
          <td>(</td>
          <td class="paramtype">const typename <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointXYZT &gt;::ConstPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the input cloud with xyz point coordinates. The cloud has to be organized. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>The input cloud with xyz point coordinates. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      {</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a0607678b69d79b3a17cd1dd41bde7bed">cloud_xyz_</a> = cloud;</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a90463997ca182bea387905995cd4ba5b">surface_normal_mod_</a>.<a class="code" href="classpcl_1_1_surface_normal_modality.html#a49d1ef3d40ddcf485b1a6c7739bfa301">setInputCloud</a> (cloud);</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a90463997ca182bea387905995cd4ba5b">surface_normal_mod_</a>.<a class="code" href="classpcl_1_1_surface_normal_modality.html#a4e79645c315583b70b671461f46edf70">processInputData</a> ();</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_surface_normal_modality_html_a49d1ef3d40ddcf485b1a6c7739bfa301"><div class="ttname"><a href="classpcl_1_1_surface_normal_modality.html#a49d1ef3d40ddcf485b1a6c7739bfa301">pcl::SurfaceNormalModality::setInputCloud</a></div><div class="ttdeci">virtual void setInputCloud(const typename PointCloudIn::ConstPtr &amp;cloud)</div><div class="ttdoc">Provide a pointer to the input dataset (overwrites the PCLBase::setInputCloud method)</div><div class="ttdef"><b>Definition:</b> surface_normal_modality.h:414</div></div>
<div class="ttc" id="aclasspcl_1_1_surface_normal_modality_html_a4e79645c315583b70b671461f46edf70"><div class="ttname"><a href="classpcl_1_1_surface_normal_modality.html#a4e79645c315583b70b671461f46edf70">pcl::SurfaceNormalModality::processInputData</a></div><div class="ttdeci">virtual void processInputData()</div><div class="ttdoc">Processes the input data (smoothing, computing gradients, quantizing, filtering, spreading).</div><div class="ttdef"><b>Definition:</b> surface_normal_modality.h:514</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ad55523e1edc468703620be5cb9bc5338"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad55523e1edc468703620be5cb9bc5338">&#9670;&nbsp;</a></span>setInputColors()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::setInputColors </td>
          <td>(</td>
          <td class="paramtype">const typename <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointRGBT &gt;::ConstPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the input cloud with rgb values. The cloud has to be organized. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>The input cloud with rgb values. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      {</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a1beab8c5b441a6cd523b82be78f54a08">cloud_rgb_</a> = cloud;</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">color_gradient_mod_</a>.setInputCloud (cloud);</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a79eca58ec3037bc34da9f7ea0e616f97">color_gradient_mod_</a>.processInputData ();</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a1beab8c5b441a6cd523b82be78f54a08"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a1beab8c5b441a6cd523b82be78f54a08">pcl::LineRGBD::cloud_rgb_</a></div><div class="ttdeci">pcl::PointCloud&lt; PointRGBT &gt;::ConstPtr cloud_rgb_</div><div class="ttdoc">RGB point cloud.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:303</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="acdad286f8f0e557afe8590ff4e6d8026"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acdad286f8f0e557afe8590ff4e6d8026">&#9670;&nbsp;</a></span>setIntersectionVolumeThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointXYZT , typename PointRGBT  = PointXYZT&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_line_r_g_b_d.html">pcl::LineRGBD</a>&lt; PointXYZT, PointRGBT &gt;::setIntersectionVolumeThreshold </td>
          <td>(</td>
          <td class="paramtype">const float&#160;</td>
          <td class="paramname"><em>threshold</em> = <code>1.0f</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Sets the threshold for the decision whether two detections of the same template are merged or not. If ratio between the intersection of the bounding boxes of two detections and the original bounding boxes is larger than the specified threshold then they are merged. If detection A overlaps with detection B and B with C than A, B, and C are merged. Threshold has to be between 0 and 1. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">threshold</td><td>The threshold on the ratio between the intersection bounding box and the original bounding box. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      {</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <a class="code" href="classpcl_1_1_line_r_g_b_d.html#a7b3b5780742852ca02cce124ae841955">intersection_volume_threshold_</a> = threshold;</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_line_r_g_b_d_html_a7b3b5780742852ca02cce124ae841955"><div class="ttname"><a href="classpcl_1_1_line_r_g_b_d.html#a7b3b5780742852ca02cce124ae841955">pcl::LineRGBD::intersection_volume_threshold_</a></div><div class="ttdeci">float intersection_volume_threshold_</div><div class="ttdoc">Intersection volume threshold.</div><div class="ttdef"><b>Definition:</b> line_rgbd.h:291</div></div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>recognition/include/pcl/recognition/linemod/<a class="el" href="line__rgbd_8h_source.html">line_rgbd.h</a></li>
<li>recognition/include/pcl/recognition/impl/linemod/<a class="el" href="line__rgbd_8hpp_source.html">line_rgbd.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_line_r_g_b_d.html">LineRGBD</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
